<?php

namespace app\steps;

use think\db\Query;
use tpScriptVueCurd\base\model\BaseModel;
use tpScriptVueCurd\base\model\VueCurlModel;
use tpScriptVueCurd\field\DateField;
use tpScriptVueCurd\field\RadioField;
use tpScriptVueCurd\field\StringField;
use tpScriptVueCurd\FieldCollection;
use tpScriptVueCurd\ModelField;
use tpScriptVueCurd\option\FieldStepBase;
use tpScriptVueCurd\option\FieldStepBaseConfig;

/**
 * 项目录入步骤
 */
class Input extends FieldStepBase
{

    public static function name(): string
    {
        return 'input';
    }

    public static function make(): FieldStepBase
    {
        return new self([
            //input输入框
            StringField::init('name','项目名称')
                ->required(true) //必填
                ->listShow(true)//在列表中显示此字段

            //单选
            ,RadioField::init('type','项目类型')
                ->items(['A类项目','B类项目'])//选项
                ->required(true) //必填
                ->listShow(true)//在列表中显示此字段
            //日期选择
            ,DateField::init('start_time','项目开始时间')
                ->required(true) //必填
                ->listShow(true)//在列表中显示此字段
            //日期选择
            ,DateField::init('end_time','项目结束时间')
                ->required(true) //必填
                ->listShow(true),
        ]);
    }


    public function config(FieldStepBaseConfig $config): void
    {
        $config->title='项目信息';
        $config->listBtnText='项目信息';
        $config->listBtnUrl=url('project/edit')->build();
        //更多属性请查看 https://gitee.com/tjztjspz/tp-script-vue-curd/blob/master/src/option/FieldStepBaseConfig.php
    }

    /**
     * 是否可修改编辑
     * @param VueCurlModel|null $info
     * @param BaseModel|null $baseInfo
     * @param FieldCollection|null $fields
     * @return bool
     */
    public function canEdit(VueCurlModel $info = null, BaseModel $baseInfo = null, FieldCollection $fields = null): bool
    {
        return eqEndStep(self::name(),$info);
    }


    /**
     * 步骤判断，数据的下一步是否为当前步骤
     * @param VueCurlModel|null $info
     * @param BaseModel|null $baseInfo
     * @param ModelField|null $field
     * @return bool
     */
    protected function beforeCheck(VueCurlModel $info = null, BaseModel $baseInfo = null, ModelField $field = null): bool
    {
        //如果没有ID，表示是新增数据，返回true，或者数据当前步骤是撤回，那么下一步就是本步骤录入
        return is_null($info)||empty($info->id)||eqEndStep(Withdrawal::name(),$info);
    }

    /**
     * 人员是否有执行当前步骤的权限
     * @param VueCurlModel|null $info
     * @param BaseModel|null $baseInfo
     * @param FieldCollection|null $fields
     * @return bool
     */
    protected function auth(VueCurlModel $info = null, BaseModel $baseInfo = null, FieldCollection $fields = null): bool
    {
        return true;
    }

    protected function authWhere(Query $query): void
    {
        // TODO: Implement authWhere() method.
    }
}